// ============================================================================================================================================
//
//
//
//
// Fx通用模块
//
//
//
//
// ============================================================================================================================================
#ifndef UNITY_SHADER_DT_FX_COMMON_UTIL_INCLUDED  
#define UNITY_SHADER_DT_FX_COMMON_UTIL_INCLUDED
    // ======================================================================
    // 精度总控制
    // ======================================================================
        typedef float        DTfloat;
        typedef float2       DTfloat2;
        typedef float3       DTfloat3;
        typedef float4       DTfloat4;

        typedef float2x2     DTfloat2x2;
        typedef float2x3     DTfloat2x3;
        typedef float2x4     DTfloat2x4;

        typedef float3x2     DTfloat3x2;
        typedef float3x3     DTfloat3x3;
        typedef float3x4     DTfloat3x4;
        typedef float4x3     DTfloat4x3;
        typedef float4x4     DTfloat4x4;

        #define DT_INV2PI  0.15915494309f //UNITY_INV_TWO_PI
        #define SAFE_MIN 0.0000001
        #define SAFE_MIN2 DTfloat2(0.0000001,0.0000001)
        #define SAFE_COLOR_MIN 0.003921568627451
        #define SAFE_COLOR_MAX 0.996078431372549
        #define SAFE_FLOAT_MIN -60000
        #define SAFE_FLOAT_MAX 60000

        #define DT_SAFE_VALUE(v) (abs(v) < SAFE_MIN ? SAFE_MIN : (v))
        #define DT_SAFE_VALUE2(v) (abs(v.xy) < SAFE_MIN2 ? SAFE_MIN2 : (v.xy))
        #define SAFE_COLOR(col) (clamp((col), SAFE_COLOR_MIN, SAFE_COLOR_MAX))

    // ==================================================================
    // 函数
    // ================================================================== 
        DTfloat dt_Ramp_float(DTfloat val, DTfloat IMIN, DTfloat IMAX, DTfloat OMIN, DTfloat OMAX) 
        { 
            return OMIN + ((val - IMIN) * (OMAX - OMIN)) / DT_SAFE_VALUE(IMAX - IMIN);
        }

#endif //UNITY_SHADER_DT_FX_COMMON_UTIL_INCLUDED